package com.hksj.cm.service;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hksj.cm.dto.CleanlinessLevelDTO;
import com.hksj.cm.entity.CleanlinessLevel;
import com.hksj.cm.mapper.CleanlinessLevelMapper;
import com.hksj.cm.vo.CleanlinessLevelVO;
import com.hksj.common.core.model.Rest;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;

import javax.annotation.Resource;
import java.util.List;

/**
 * @author zengke
 * @version 1.0
 * @see CleanlinessLevelService
 * @since 2024/3/7 11:40
 */
@Service
public class CleanlinessLevelService extends ServiceImpl<CleanlinessLevelMapper, CleanlinessLevel> {
//    @Resource
//    private DictionaryDetailService dictionaryDetailService;

    /**
     * 新增洁净级别配置
     *
     * @param dto 前端传来的json参数
     * @return 返回执行结果
     */
    public Rest<String> createCleanlinessLevel(CleanlinessLevelDTO dto) {
        if (dto.getMin() > dto.getMax()) {
            return Rest.fail("填写的最小值不能比最大值大");
        }

        //同一粒子同一标准不可重复新增
        Integer count = lambdaQuery().eq(CleanlinessLevel::getParticleValue, dto.getParticleValue())
                .eq(CleanlinessLevel::getRatingValue, dto.getRatingValue())
                .eq(CleanlinessLevel::getConstructionStandardsValue, dto.getConstructionStandardsValue())
                .count();
        //判断是否存在
        if (count > 0) {
            return Rest.fail("已存在该配置,请检查后重试");
        }

        //开始新增
        //创建一个CleanlinessLevel实例 cleanlinessLevel
        CleanlinessLevel cleanlinessLevel = new CleanlinessLevel();

        //将dto中的属性值赋值给cleanlinessLevel
        BeanUtils.copyProperties(dto, cleanlinessLevel);

        //调用save方法进行新增
        boolean saveStatus = save(cleanlinessLevel);

        //判断是否新增成功
        if (!saveStatus) {
            return Rest.fail("新增失败");
        }

        return Rest.ok("新增成功");
    }

    /**
     * 删除洁净级别配置
     *
     * @param id 主键id
     * @return 返回执行结果
     */
    public Rest<String> deleteCleanlinessLevel(String id) {

        //删除前先根据id查询洁净级别配置是否存在
        CleanlinessLevel cleanlinessLevel = getById(id);

        //判断是否存在
        if (ObjectUtils.isEmpty(cleanlinessLevel)) {
            return Rest.fail("请刷新页面,勿重复删除");
        }

        //开始删除
        //调用removeById方法删除
        boolean removeStatus = removeById(id);

        //判断是否删除成功
        if (!removeStatus) {
            return Rest.fail("删除失败");
        }

        return Rest.ok("删除成功");
    }

//    /**
//     * 填写评级范围低值和评级范围高值时的校验
//     *
//     * @param dto 前端传来的json参数
//     * @return 返回提示信息
//     */
//    @Transactional
//    public Rest<String> check(CleanlinessLevelDTO dto) {
//
//        //判断是否输入粒子类型标准
//        Assert.notNull(dto.getParticleId(), "粒子类型未填写");
//
//        //判断是否填写优良差评级或数字评级
//        Assert.notNull(dto.getRatingId(), "评级未填写");
//
//        //通过字典明细的id查询到字典明细 此时明细id=评级id
//        DictionaryDetail dictionaryDetail = dictionaryDetailService.queryDictionaryDetailById(dto.getRatingId());
//
//        //获取到seq值
//        int seq = dictionaryDetail.getSeq();
//
//        //获取类型id
//        Long typeId = dictionaryDetail.getTypeId();
//
//        //当前的值为value 比它大的为value+1 比它小的为value-1
//        //通过typeId + value获取 Id
//
//        //比当前粒子的评级值小一级的评级
//        DictionaryDetail smallRating = dictionaryDetailService.lambdaQuery().eq(DictionaryDetail::getTypeId, typeId)
//                .eq(DictionaryDetail::getSeq, seq - 1)
//                .one();
//
//        //比当前粒子的评级值大一级的评级
//        DictionaryDetail bigRating = dictionaryDetailService.lambdaQuery().eq(DictionaryDetail::getTypeId, typeId)
//                .eq(DictionaryDetail::getSeq, seq + 1)
//                .one();
//
//        //通过 粒子类型id+评级id查询粒子的评级范围
//        CleanlinessLevel small = lambdaQuery().eq(CleanlinessLevel::getParticleId, dto.getParticleId())
//                .eq(CleanlinessLevel::getRatingId, smallRating == null ? null : smallRating.getId())
//                .one();
//
//        CleanlinessLevel big = lambdaQuery().eq(CleanlinessLevel::getParticleId, dto.getParticleId())
//                .eq(CleanlinessLevel::getRatingId, bigRating == null ? null : bigRating.getId())
//                .one();
//
//        if (small != null) {
//            if (dto.getMin() != null) {
//                if (dto.getMin() < small.getMax()) {
//                    return Rest.fail("输入的最小范围应该大于等于" + small.getMax());
//                }
//            }
//        }
//
//        if (big != null) {
//            if (dto.getMax() != null) {
//                if (dto.getMax() > big.getMin()) {
//                    return Rest.fail("输入的最大范围应该小于等于" + big.getMin());
//                }
//            }
//        }
//
//        return Rest.ok("校验成功");
//
//    }

    /**
     * 更新洁净级别
     *
     * @param dto 前端传来的json参数
     * @return 返回执行结果
     */
    public Rest<String> updateCleanlinessLevel(CleanlinessLevelDTO dto) {

        //修改前先查询数据库中是否已存在 相同的粒子及其粒子的评级
        Integer count = lambdaQuery().eq(CleanlinessLevel::getParticleValue, dto.getParticleValue())
                .eq(CleanlinessLevel::getRatingValue, dto.getRatingValue())
                .ne(CleanlinessLevel::getId, dto.getId())
                .count();

        //判断是否存在
        if (count > 0) {
            return Rest.fail("修改失败,存在将修改的配置");
        }

        //进行修改
        //创建一个CleanlinessLevel实例 cleanlinessLevel
        CleanlinessLevel cleanlinessLevel = new CleanlinessLevel();

        //将dto中的属性复制到 cleanlinessLevel
        BeanUtils.copyProperties(dto, cleanlinessLevel);

        //调用updateById更新
        boolean updateStatus = updateById(cleanlinessLevel);

        //判断更新是否成功
        if (!updateStatus) {
            return Rest.fail("更新失败");
        }

        return Rest.ok("更新成功");
    }

    public List<CleanlinessLevelVO> queryCleanlinessLevelList(Integer type) {

        //调用mapper中的queryCleanlinessLevelList方法获取评级列表
        return baseMapper.queryCleanlinessLevelList(type);
    }


}
